package JVM;

public class jvm2 {
    /**
     * 1.如何判断对象是否课回收
     * 引用计数法
     *   是通过维护每个对象的 引用计数来判断对象是否可以回收的。每当有一个引用指向该对象时,计数器就增加;每当
     *   引用失效(即引用不再指向该对象)时,计数器就减少。如果一个对象的引用计数为零,说明该对象不再被任何地方引用,
     *   可以被垃圾回收。
     * 1.2可达性分析法
     *    目前,JVM主流的垃圾回收器(如HotSpot)都采用了可达性分析法来判断对象是否可回收。这个方法比引用计数法更为
     *     灵活和准确,能够解决循环引用的问题。
     *
     *  1.可达性分析法的工作原理
     *      根节点：首先,jvm会从一组特殊的根节点开始
     *      可达性分析：通过遍历从GC Roots出发的引用链,标记出所有可以到达的对象。
     *      不可达对象：如果一个对象无法通过任何引用链访问到,说明该对象不再被任何活跃的线程或静态引用所引用,它就是不可达
     *      对象,即为垃圾对象,可以被回收。
     *
     *  2.哪些对象可以作为GC Roots
     *     栈上的局部变量：方法的局部变量,它们是当前线程执行的过程中的一部。
     *     静态字段：类的静态字段(静态变量),即使没有任何线程持有该类的实例引用,只要静态字段指向对象,这个对象仍然是可达的。
     *     JNI引用:Java代码通过本地方法(Native Methods)进行的引用,JNI是Java与本地代码交互的桥梁。
     *     Java虚拟机内部的引用,被同步锁持有的对象
     *
     *  引用的类型
     *     在java中,对象可以通过不同的引用类型来引用。根据引用的强度,JVM会对不同类型的引用采取不同的回收策略。常见的引用类型包括：
     *     强引用(Strong Reference):普通的引用,通常是创建一个Object。只要存在强引用指向对象,垃圾回收器就不会回收该对象。
     *     软引用(Soft Reference):内存充足时不会回收,当内存将要溢出时,会把这些对象列入回收范围之中进行第二次回收,如果这次回收
     *     还没有足够的内存,就会抛出内存溢出的异常。
     *     弱引用(Weak Reference):无论内存是否充足,用弱引用关联的对象只会存活到下次垃圾收集发生为止。
     *     虚引用(Phantom Reference):与软引用和弱引用不同的是,虚引用不能单独使用,必须和引用队列(ReferenceQueue)联合使用。
     *
     *
     */
}
